package com.wnxy.mapper;

import com.wnxy.entity.Employee;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface EmployeeMapper {
    /**
     * 根据id来查询员工对象
     * @param id 主键id
     * @return 员工对象（数据库的一条记录被封装成了java的一个对象【反序列化】）
     */
    Employee findById(int id);

    /**
     * 添加一条员工信息
     * @param ajk 添加的员工对象
     * @return 受影响的行数
     */
    int add(Employee ajk);

    /**
     * 动态添加
     * @param list 员工集合
     * @return 受影响的行数
     */
    int addBatch(@Param("list") List<Employee> list);
    /**
     * 修改一条员工信息
     * @param emp 根据ajk对象中id来修改员工信息
     * @return 受影响的行数
     */
    int update(Employee emp);

    /**
     * 动态更新
     * @param emp 员工元素
     * @return 受影响的行数
     */
    int updateByCondition(Employee emp);
    /**
     * 根据id来删除员工对象
     * @param id 主键id
     * @return 受影响的行数
     */
    int deleteById(int id);

    /**
     * 动态删除
     * @param ids 主键id
     * @return 受影响的行数
     */
    int deleteByIds(@Param("ids") int... ids);
    /**
     * 查询所有
     * @return 员工信息的数组
     */
    List<Employee> findAll();

    /**
     * 组合查询
     * @param rent 员工元素
     * @return 员工信息的数组
     */
    List<Employee> findByCondition(Employee rent);

    /**
     * 动态分页
     * @param rent 员工元素
     * @param start 开始的下标
     * @param num 显示的行数
     * @return
     */
    List<Employee> findConditionLimit(@Param("rent") Employee rent,
                                      @Param("start") int start, @Param("num") int num); // 动态条件的分页查询
    /**
     * 模糊查询
     * @param con 所要查询列的名字
     * @param val 模糊查询的条件
     * @return 员工信息的数组
     */
    List<Employee> findLike(@Param("con") String con,
                            @Param("val") String val);

    /**
     * 查询符合条件的行数
     * @param con 所要查询列的名字
     * @param val 查询的条件
     * @return 符合条件的行数的数量
     */
    int count(@Param("con") String con,
              @Param("val") String val);

    /**
     * 查询数据数量
     * @return
     */
    int countAll();
    /**
     *查询多少行到多少行
     * @param start 从某一行数后来开始
     * @param num 查询的行数
     * @return 符合条件的行数
     */
    List<Employee> findLimit(@Param("start") int start,
                             @Param("num") int num);
}
